Reference
- 스트림(Stream) 이란? - 정보통신기술용어해설
- 스트림(Stream)이란 - 프로그래머의 블로그
- Java IO : Input-output in Java with Examples - geeksforgeeks.com
- Java IO Stream - studytonight.com
자바의 입출력과 관련해서 이것저것 찾아보다가 stream에 대해 잘 이해해두면 좋을 것 같아 정리하게 되었다.
(JDK 8에서 Stream API가 추가되기도 했고… 여러모로 정확한 개념 이해가 중요할 것 같다)
I/O Stream
이렇게 프로그래밍 언어들은 스트림(stream)을 통해 데이터를 입력받고 출력한다.
정보통신기술용어해설 에 따르면,
Stream이란?
※ 영어 뜻으로는, 흐르는 시냇물
등을 의미
ㅇ [데이터 관점]
- 일반적으로, 데이터,패킷,비트 등의 일련의 연속성을 갖는 흐름을 의미
. 음성,영상,텍스트 등의 작은 데이터 조각들이 하나의 줄기를 이루며,
. 순서대로 물 흐르듯이 전송되는 데이터 열(列)
Stream 즉, 시냇물은 연속적이고 흐르는 것이 핵심이고 이 용어가 사용되는 곳에 따라 해석이 조금 확장되는 것 같다
예를 들어, 음료수와 그 음료수에 빨대가 꽂혀 있다고 하자.
빨대를 쭉 빨아 당기면 음료수가 빨대에 모이게 되고, 계속 빨아 당기면 입안으로 음료수가 들어오게 된다.
여기서 음료수는 입력 받고자하는 데이터가 되고 빨대는 스트림, 입은 프로그램으로 생각해볼 수 있다.
(반대는… 상상에 맡긴다)
데이터를 운반하는데 사용되는 연결통로같은 개념이라면 왜 굳이 스트림이라는 단어를 사용했을까?
이는 데이터가 물의 흐름과 같이 흘러가고 물이 한쪽 방향으로만 흐르는 것 같이 데이터가 단방향 통신 만 가능하기 때문이다.
즉 하나의 스트림으로 입력과 출력을 동시에 처리할 수 없다.
ㅇ 스트림 사용 이유
- 물리 디스크상의 파일,장치들을 통일된 방식으로 다루기 위한 가상적인 개념
. 따라서, 스트림은 어디서 나왔는지 어디로 가는지 신경을 쓸 필요없이 자유롭게
어떤 장치,프로세스,파일들과 연결될 수 있어 프로그래머에게 많은 편리성 줌
Java에서 Stream 종류
1. Operation 타입에 따른 스트림
- Input Stream
- Output Stream